import os

from flask import Flask, request, render_template  # 导入Flask库中的Flask、request和render_template模块
import pandas as pd

app = Flask(__name__)  # 创建一个Flask应用实例

# 存储班级信息
global df
df = pd.DataFrame()


@app.route('/')  # 定义根路由，即网站的首页--学生端
def index():
    return render_template('index.html')  # 渲染并返回首页模板


@app.route('/teacher6516523')  # 后面的数字相当于进入教师端的密码
def teacher1():
    return render_template('teacher.html')


@app.route('/upload', methods=['POST'])  # 定义上传成绩的路由，只接受POST请求
def upload():
    global df
    if request.method == 'POST':
        file = request.files['file']
        df = pd.read_excel(file, engine='openpyxl')
        # ----------------------------------在这里处理数据，例如将数据存储到数据库中
        # 输入学号和姓名
        try:
            # 测试是否可以正确读取数据
            row_labels = [0, 1]
            result = df.loc[row_labels]
            # 输出结果
            print(result)
        except Exception as e:
            return "检查文档是否存在问题，请退回重新上传！"
        # 将读取到的数据存储追加到data.csv文件,下次就不用重新上传文件了
        # 如果文件不存在或为空，则创建文件
        with open('data.csv', 'a') as file:
            pass
        df.to_csv('data.csv', mode='a', index=False, encoding='utf-8')

        return '文件已成功上传并处理！'

    return render_template('upload.html')


# 删除数据
@app.route('/clear_data', methods=['POST'])
def clear_data():
    # 在这里实现清除数据的逻辑
    file_path = "data.csv"
    if os.path.exists(file_path):
        os.remove(file_path)
        print("数据已经清除！")
        return '数据清除成功！'
    else:
        return '数据清除成功！'


@app.route('/query', methods=['GET'])  # 定义查询成绩的路由，只接受GET请求
def query():
    try:
        student_id = request.args.get('student_id')  # 获取URL参数中名为'student_id'的值
        student_name = request.args.get('student_name')  # 获取URL参数中名为'student_name'的值
        # 读取data.csv中的数据存回df中
        df = pd.read_csv('data.csv')
        result = df.loc[(df['学号'] == student_id) & (df['姓名'] == student_name)]  # 根据学号和姓名查询学生成绩
        studentInfo = result["成绩"].to_dict()  # 将结果转为字典再处理
        print(type(studentInfo))
        for a in studentInfo.values():
            c = a
        print(f"成绩为{c}")
        return student_name + "同学，你的成绩为：" + str(c)  # 如果匹配，返回该学生的成绩

    except Exception as e:
        return '请检查信息是否输错！'  # 如果不匹配，返回未找到成绩的提示信息


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)  # 运行Flask应用   设置host='0.0.0.0', port=5000这样公共网络才可以访问
